package com.teaphy.enclosing;

import java.lang.reflect.Constructor;
import java.lang.reflect.Method;

/**
 * 1. getEnclosingClass()->Class<?>:该类是在那个类中定义的， 比如直接定义的内部类或匿名内部类
 * 2. getEnclosingConstructor()->Constructor<?>:该类是在哪个构造函数中定义的，比如构造方法中定义的匿名内部类
 * 3. getEnclosingMethod()->Method:该类是在哪个方法中定义的，比如方法中定义的匿名内部类
 */
public class EnclosingClassDemo {

	public static void main(String[] args) {

		// 1. getEnclosingConstructor()->Constructor<?>:该类是在哪个构造函数中定义的，比如构造方法中定义的匿名内部类
		Outer outer = new Outer();
		Outer.MemberInner memberInner = outer.new MemberInner();
		Class clMemberInner = memberInner.getClass();
		// 2. getEnclosingClass()->Class<?>:该类是在那个类中定义的， 比如直接定义的内部类或匿名内部类
		System.out.println("getEnclosingClass() --> " + clMemberInner.getEnclosingClass().getName());
		// 3. getEnclosingMethod()->Method:该类是在哪个方法中定义的，比如方法中定义的匿名内部类
		outer.testMethodInner();
	}

}
